/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Almacen;

import Controlador.Bean.Almacen.Producto;
import Controlador.Bean.Almacen.SolicitudMovimiento;
import Data.config.SessionFac;
import java.io.Externalizable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;

/**
 *
 * @author César
 */
public class ServicioSolicitudMovimiento {
    public void guardar(SolicitudMovimiento solMov){
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            solMov.setIdSolicitudMovimiento(obtenerIdSiguiente(solMov.getTipo(),sqlsession));
            sqlsession.insert("Data.Almacen.ServicioSolicitudMovimiento.guardar", solMov);
            sqlsession.commit();
            sqlsession.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    public String guardarDC(SolicitudMovimiento solMov){
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            solMov.setIdSolicitudMovimiento(obtenerIdSiguiente(solMov.getTipo(),sqlsession));
            sqlsession.insert("Data.Almacen.ServicioSolicitudMovimiento.guardar", solMov);
            sqlsession.commit();
            sqlsession.close();
            return solMov.getIdSolicitudMovimiento();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return null;
    }
    
    public SolicitudMovimiento seleccionarxIdMov(String idSolMov){
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        SolicitudMovimiento data = sqlsession.selectOne("Data.Almacen.ServicioSolicitudMovimiento.seleccionarxIdMov", idSolMov);
        sqlsession.close();
        return data;
    }
    
    public String obtenerIdSiguiente(String tipo, SqlSession sqlsession ){
        String maxId;
        Long id = sqlsession.selectOne("Data.Almacen.ServicioSolicitudMovimiento.seleccionarMaxId");
        id++;
        maxId = tipo.substring(0,3).toUpperCase()+"-"+id.toString();
        return maxId;
    }
    
    public List<SolicitudMovimiento> seleccionarTodo(){
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        List<SolicitudMovimiento> data = (List)sqlsession.selectList("Data.Almacen.ServicioSolicitudMovimiento.seleccionarTodo");
        sqlsession.close();
        return data;
    }
    
    public List<SolicitudMovimiento> seleccionarPorEstado(String estado, Date fecha){
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        HashMap<String, String> hm = new HashMap<>();
        String fecFormat = new SimpleDateFormat("dd MM yyyy").format(fecha);
        hm.put("fecha", fecFormat);
        hm.put("estado", estado);
        List<SolicitudMovimiento> data = (List)sqlsession.selectList("Data.Almacen.ServicioSolicitudMovimiento.seleccionarTodo", hm);
        sqlsession.close();
        return data;
    }
    
    public void eliminar(String Id){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.update("Data.Almacen.ServicioSolicitudMovimiento.eliminar", Id);
        sqlsession.commit();
        sqlsession.close();
    }
    
    public void actualizar(SolicitudMovimiento solMov){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.update("Data.Almacen.ServicioSolicitudMovimiento.actualizar", solMov);
        sqlsession.commit();
        sqlsession.close();
    }
    
    public void aceptar(SolicitudMovimiento solMov){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        solMov.setEstado("2");
        sqlsession.update("Data.Almacen.ServicioSolicitudMovimiento.actualizar", solMov);
        sqlsession.commit();
        sqlsession.close();
    }
    
}
